package cn.tedu.oop2;
/*本类用作测试抽象的入门案例*/
public class AbstractDemo {
    public static void main(String[] args) {
        /*抽象类不可以实例化!!!-创建对象*/
        //创建多态对象进行测试
        Animal a=new Pig();
        a.eat();//调用父类自己的功能,子类没重写/实现
        a.fly();//调用父类的声明,子类实现的方法体
        a.fly2();//调用父类的声明,子类实现的方法体
    }
}
/*被abstract修饰的类是抽象类
* 如果一个类中包含了抽象方法,那么这个类必须被声明成一个抽象类*/
abstract class  Animal{//添加了抽象方法以后,本类要用abstract修饰,变成抽象类
    public void eat(){
        System.out.println("吃啥都行~");
    }
    public void play(){
        System.out.println("玩啥都行~");
    }
    //创建抽象方法
    /*1,被abstract修饰的方法是抽象方法,抽象方法没有方法体*/
    public abstract void fly();
    public abstract void fly2();


}
/*当一个子类继承了抽象父类以后,有两种解决方案:
* 方案一:变成抽象类,"躺平,我也不实现,继续抽象"
* 变成普通子类,"父债子偿,子类需要实现抽象父类中所有的抽象方法"*/
//abstract class Pig extends Animal//方案一
 class Pig extends Animal{
    @Override
    public void fly() {
        System.out.println("我爹的债终于还清了,我家的猪终于起飞啦~");
    }//方案二

    @Override
    public void fly2() {
        System.out.println("抽象父类中所有抽象方法都需要被实现");
    }

}




